#ifndef COMMON_ICOLLECTION_H
#define COMMON_ICOLLECTION_H

#include <vector>
#include "Common/Collections/IIterator.h"
#include "Common/Collections/IIterable.h"

namespace cmn {

	template<typename T>
	class ICollection : public IIterable<T> {
	public:
		virtual ~ICollection() {}

		virtual int GetLength() const = 0;

		virtual void Add( T item ) = 0;
		virtual void AddRange( IIterable<T>* iterable ) = 0;
		virtual void Remove( T item ) = 0;
		virtual void Remove( bool ( *predicate )( const T& item ) ) = 0;

		virtual void Clear() = 0;
		virtual bool Contains( T item ) const = 0;
	};
}
#endif
